using System.Collections;
using System.Collections.Generic;
using TMPro;
using TMPro.Examples;
using Unity.VisualScripting;
using UnityEngine;

public class DialogUI : BaseUI
{
    public static DialogUI dialog; // 静态实例，用于全局访问DialogUI
    private void Awake() {
        // 在Awake阶段将静态实例设为当前对象，确保对话UI可以被全局访问
        dialog = this;
        // 初始化选项按钮列表，根据选项按钮父类对象中的子对象数量初始化选项按钮列表
        optsBut = new List<GameObject>(optionButGroup.transform.childCount);
        for (int i = 0; i < optionButGroup.transform.childCount; i++) {
            // 将每个选项按钮添加到列表中
            optsBut.Add(optionButGroup.transform.GetChild(i).GameObject());
        }
    }

    private void Start() {
        // 默认隐藏“继续对话”按钮和选项按钮，并隐藏整个对话UI
        hideNextBut(); // 隐藏“继续对话”按钮
        hideOptsBut(); // 隐藏选项按钮
        hide(); // 隐藏对话UI
    }

    public TextMeshProUGUI Name; // 显示人物名称的文本组件（原注释）
    public TextMeshProUGUI Content; // 显示人物对话内容的文本组件（原注释）
    public GameObject nextBut; // 继续对话按钮的游戏对象（原注释）
    public GameObject optionButGroup; // 选项按钮的父对象（原注释），用于包含多个选项按钮
    public List<GameObject> optsBut; // 选项按钮的列表（原注释），存储多个选项按钮的引用

    // 设置人物名称(原注释) 设置对话UI中的人物名称
    public void SetUIName(string text) {
        Name.text = text; // 更新人物名称文本
    }

    // 设置对话UI中的对话内容
    public void SetUIContent(string text) {
        Content.text = text; // 更新对话内容文本
    }

    // 显示“继续对话”按钮
    public void showNextBut() {
        nextBut.SetActive(true); // 将按钮设置为可见
    }

    // 隐藏“继续对话”按钮
    public void hideNextBut() {
        nextBut.SetActive(false); // 将按钮设置为不可见
    }

    // 设置“继续对话”按钮的文本内容
    public void setNextButText(string text) {
        nextBut.GetComponentInChildren<TextMeshProUGUI>().text = text; // 更新按钮文本
    }

    // 显示选项按钮，显示的数量由参数count决定
    public void showOptsBut(int count) {
        for (int i = 0; i < count; i++) {
            // 设置前count个选项按钮为可见
            optsBut[i].SetActive(true);
        }
    }

    // 隐藏所有选项按钮
    public void hideOptsBut() {
        for (int i = 0; i < optsBut.Count; i++) {
            // 设置选项按钮为不可见，并清空按钮文本
            optsBut[i].SetActive(false);
            setOptsButText(i, ""); // 清空按钮的文本内容
        }
    }

    // 设置选项按钮内容(原注释)  设置指定索引的选项按钮的文本内容
    public void setOptsButText(int index, string text) {
        // 获取指定索引按钮的文本组件，并更新文本内容
        optsBut[index].GetComponentInChildren<TextMeshProUGUI>().text = text;
    }
}
